| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 1 | _ _ ____ _ |
| 2 | ___| | | | _ \| | |
| 3 | / __| | | | |_) | | |
| 4 | | (__| |_| | _ <| |___ |
| 5 | \___|\___/|_| \_\_____| |
| 6 | |
| 7 | TODO |
| 8 | |
| Daniel Stenberg | f54a282 | 2001-03-08 12:32:03 +0000 | [diff] [blame] | 9 | Things to do in project cURL. Please tell me what you think, contribute and |
| Daniel Stenberg | 2d50391 | 2001-06-19 09:12:27 +0000 | [diff] [blame] | 10 | send me patches that improve things! Also check the http://curl.haxx.se/dev |
| 11 | web section for various development notes. |
| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 12 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 13 | LIBCURL |
| Daniel Stenberg | 6704d44 | 2001-08-22 11:22:43 +0000 | [diff] [blame] | 14 | |
| Daniel Stenberg | 2c39a43 | 2001-07-02 08:21:25 +0000 | [diff] [blame] | 15 | * Consider an interface to libcurl that allows applications to easier get to |
| 16 | know what cookies that are sent back in the response headers. |
| 17 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 18 | * Make content encoding/decoding internally be made using a filter system. |
| 19 | |
| Daniel Stenberg | 8863127 | 2002-03-18 07:40:00 +0000 | [diff] [blame] | 20 | * Test the 'multi' interface more. |
| Daniel Stenberg | 2d50391 | 2001-06-19 09:12:27 +0000 | [diff] [blame] | 21 | |
| 22 | * Introduce another callback interface for upload/download that makes one |
| 23 | less copy of data and thus a faster operation. |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 24 | [http://curl.haxx.se/dev/no_copy_callbacks.txt] |
| 25 | |
| 26 | * Add configure options that disables certain protocols in libcurl to |
| 27 | decrease footprint. '--disable-[protocol]' where protocol is http, ftp, |
| 28 | telnet, ldap, dict or file. |
| 29 | |
| 30 | * Add asynchronous name resolving. http://curl.haxx.se/dev/async-resolver.txt |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 31 | This should be made to work on most of the supported platforms, or |
| 32 | otherwise it isn't really interesting. |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 33 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 34 | * Data sharing. Tell which easy handles within a multi handle that should |
| Daniel Stenberg | c3bfb35 | 2002-04-12 07:19:43 +0000 | [diff] [blame] | 35 | share cookies, connection cache, dns cache, ssl session cache. Full |
| 36 | suggestion found here: http://curl.haxx.se/dev/sharing.txt |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 37 | |
| 38 | * Mutexes. By adding mutex callback support, the 'data sharing' mentioned |
| 39 | above can be made between several easy handles running in different threads |
| 40 | too. The actual mutex implementations will be left for the application to |
| 41 | implement, libcurl will merely call 'getmutex' and 'leavemutex' callbacks. |
| Daniel Stenberg | c3bfb35 | 2002-04-12 07:19:43 +0000 | [diff] [blame] | 42 | Part of the sharing suggestion at: http://curl.haxx.se/dev/sharing.txt |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 43 | |
| 44 | * No-faster-then-this transfers. Many people have limited bandwidth and they |
| 45 | want the ability to make sure their transfers never use more bandwith than |
| 46 | they think is good. |
| 47 | |
| 48 | * Set the SO_KEEPALIVE socket option to make libcurl notice and disconnect |
| 49 | very long time idle connections. |
| Daniel Stenberg | 558d12d | 2001-12-17 10:32:10 +0000 | [diff] [blame] | 50 | |
| Daniel Stenberg | 39d4552 | 2002-01-21 12:11:45 +0000 | [diff] [blame] | 51 | * Make sure we don't ever loop because of non-blocking sockets return |
| Daniel Stenberg | 5c4b422 | 2002-02-18 10:51:28 +0000 | [diff] [blame] | 52 | EWOULDBLOCK or similar. This concerns the HTTP request sending (and |
| 53 | especially regular HTTP POST), the FTP command sending etc. |
| Daniel Stenberg | 39d4552 | 2002-01-21 12:11:45 +0000 | [diff] [blame] | 54 | |
| Daniel Stenberg | c9c00d2 | 2002-01-22 13:10:16 +0000 | [diff] [blame] | 55 | * Go through the code and verify that libcurl deals with big files >2GB and |
| 56 | >4GB all over. Bug reports indicate that it doesn't currently work |
| 57 | properly. |
| 58 | |
| Daniel Stenberg | 8863127 | 2002-03-18 07:40:00 +0000 | [diff] [blame] | 59 | * Make the built-in progress meter use its own dedicated output stream, and |
| 60 | make it possible to set it. Use stderr by default. |
| 61 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 62 | DOCUMENTATION |
| 63 | |
| Daniel Stenberg | c3bfb35 | 2002-04-12 07:19:43 +0000 | [diff] [blame] | 64 | * Include documentation in the main archive about all the various libcurl |
| 65 | bindings. |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 66 | |
| 67 | FTP |
| 68 | |
| 69 | * FTP ASCII upload does not follow RFC959 section 3.1.1.1: "The sender |
| 70 | converts the data from an internal character representation to the standard |
| 71 | 8-bit NVT-ASCII representation (see the Telnet specification). The |
| 72 | receiver will convert the data from the standard form to his own internal |
| 73 | form." |
| Daniel Stenberg | 0058e87 | 2001-05-18 12:55:13 +0000 | [diff] [blame] | 74 | |
| Daniel Stenberg | 6704d44 | 2001-08-22 11:22:43 +0000 | [diff] [blame] | 75 | * An option to only download remote FTP files if they're newer than the local |
| 76 | one is a good idea, and it would fit right into the same syntax as the |
| 77 | already working http dito works. It of course requires that 'MDTM' works, |
| 78 | and it isn't a standard FTP command. |
| 79 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 80 | * Add FTPS support with SSL for the data connection too. |
| Daniel Stenberg | ff681f7 | 2001-03-13 15:44:31 +0000 | [diff] [blame] | 81 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 82 | HTTP |
| Daniel Stenberg | 2c39a43 | 2001-07-02 08:21:25 +0000 | [diff] [blame] | 83 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 84 | * HTTP PUT for files passed on stdin *OR* when the --crlf option is |
| 85 | used. Requires libcurl to send the file with chunked content |
| 86 | encoding. [http://curl.haxx.se/dev/HTTP-PUT-stdin.txt] When the filter |
| 87 | system mentioned above gets real, it'll be a piece of cake to add. |
| Daniel Stenberg | e559a7b | 2000-08-21 21:56:41 +0000 | [diff] [blame] | 88 | |
| Daniel Stenberg | 0ec370e | 2002-02-18 23:17:57 +0000 | [diff] [blame] | 89 | * Pass a list of host name to libcurl to which we allow the user name and |
| 90 | password to get sent to. Currently, it only get sent to the host name that |
| 91 | the first URL uses (to prevent others from being able to read it), but this |
| 92 | also prevents the authentication info from getting sent when following |
| 93 | locations to legitimate other host names. |
| 94 | |
| Daniel Stenberg | f54a282 | 2001-03-08 12:32:03 +0000 | [diff] [blame] | 95 | * "Content-Encoding: compress/gzip/zlib" HTTP 1.1 clearly defines how to get |
| 96 | and decode compressed documents. There is the zlib that is pretty good at |
| 97 | decompressing stuff. This work was started in October 1999 but halted again |
| 98 | since it proved more work than we thought. It is still a good idea to |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 99 | implement though. This requires the filter system mentioned above. |
| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 100 | |
| Daniel Stenberg | f54a282 | 2001-03-08 12:32:03 +0000 | [diff] [blame] | 101 | * Authentication: NTLM. Support for that MS crap called NTLM |
| Daniel Stenberg | 4818717 | 2000-09-21 08:53:59 +0000 | [diff] [blame] | 102 | authentication. MS proxies and servers sometime require that. Since that |
| 103 | protocol is a proprietary one, it involves reverse engineering and network |
| 104 | sniffing. This should however be a library-based functionality. There are a |
| 105 | few different efforts "out there" to make open source HTTP clients support |
| 106 | this and it should be possible to take advantage of other people's hard |
| Daniel Stenberg | c111033 | 2001-02-16 13:41:34 +0000 | [diff] [blame] | 107 | work. http://modntlm.sourceforge.net/ is one. There's a web page at |
| 108 | http://www.innovation.ch/java/ntlm.html that contains detailed reverse- |
| 109 | engineered info. |
| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 110 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 111 | * RFC2617 compliance, "Digest Access Authentication" A valid test page seem |
| 112 | to exist at: http://hopf.math.nwu.edu/testpage/digest/ And some friendly |
| 113 | person's server source code is available at |
| 114 | http://hopf.math.nwu.edu/digestauth/index.html Then there's the Apache |
| 115 | mod_digest source code too of course. It seems as if Netscape doesn't |
| 116 | support this, and not many servers do. Although this is a lot better |
| 117 | authentication method than the more common "Basic". Basic sends the |
| 118 | password in cleartext over the network, this "Digest" method uses a |
| 119 | challange-response protocol which increases security quite a lot. |
| 120 | |
| 121 | * Pipelining. Sending multiple requests before the previous one(s) are done. |
| 122 | This could possibly be implemented using the multi interface to queue |
| 123 | requests and the response data. |
| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 124 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 125 | TELNET |
| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 126 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 127 | * Make TELNET work on windows98! |
| Daniel Stenberg | 7c37c6a | 2000-05-22 17:35:35 +0000 | [diff] [blame] | 128 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 129 | * Reading input (to send to the remote server) on stdin is a crappy solution |
| 130 | for library purposes. We need to invent a good way for the application to |
| 131 | be able to provide the data to send. |
| 132 | |
| 133 | * Move the telnet support's network select() loop go away and merge the code |
| 134 | into the main transfer loop. Until this is done, the multi interface won't |
| 135 | work for telnet. |
| 136 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 137 | SSL |
| 138 | |
| Daniel Stenberg | 5cffe05 | 2002-02-07 10:43:43 +0000 | [diff] [blame] | 139 | * If you really want to improve the SSL situation, you should probably have a |
| 140 | look at SSL cafile loading as well - quick traces look to me like these are |
| 141 | done on every request as well, when they should only be necessary once per |
| 142 | ssl context (or once per handle). Even better would be to support the SSL |
| 143 | CAdir option - instead of loading all of the root CA certs for every |
| 144 | request, this option allows you to only read the CA chain that is actually |
| 145 | required (into the cache)... |
| 146 | |
| Daniel Stenberg | 60f1926 | 2001-11-13 09:56:29 +0000 | [diff] [blame] | 147 | * Add an interface to libcurl that enables "session IDs" to get |
| 148 | exported/imported. Cris Bailiff said: "OpenSSL has functions which can |
| 149 | serialise the current SSL state to a buffer of your choice, and |
| 150 | recover/reset the state from such a buffer at a later date - this is used |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 151 | by mod_ssl for apache to implement and SSL session ID cache". This whole |
| 152 | idea might become moot if we enable the 'data sharing' as mentioned in the |
| 153 | LIBCURL label above. |
| Daniel Stenberg | 60f1926 | 2001-11-13 09:56:29 +0000 | [diff] [blame] | 154 | |
| Daniel Stenberg | 5c4b422 | 2002-02-18 10:51:28 +0000 | [diff] [blame] | 155 | * OpenSSL supports a callback for customised verification of the peer |
| 156 | certificate, but this doesn't seem to be exposed in the libcurl APIs. Could |
| 157 | it be? There's so much that could be done if it were! (brought by Chris |
| 158 | Clark) |
| 159 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 160 | * Make curl's SSL layer option capable of using other free SSL libraries. |
| 161 | Such as the Mozilla Security Services |
| 162 | (http://www.mozilla.org/projects/security/pki/nss/) and GNUTLS |
| 163 | (http://gnutls.hellug.gr/) |
| 164 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 165 | LDAP |
| 166 | |
| 167 | * Look over the implementation. The looping will have to "go away" from the |
| 168 | lib/ldap.c source file and get moved to the main network code so that the |
| 169 | multi interface and friends will work for LDAP as well. |
| 170 | |
| Daniel Stenberg | 3e049a9 | 2001-11-13 09:06:32 +0000 | [diff] [blame] | 171 | CLIENT |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 172 | |
| Daniel Stenberg | 3e049a9 | 2001-11-13 09:06:32 +0000 | [diff] [blame] | 173 | * "curl ftp://site.com/*.txt" |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 174 | |
| Daniel Stenberg | 2519a8c | 2001-11-14 09:32:30 +0000 | [diff] [blame] | 175 | * Several URLs can be specified to get downloaded. We should be able to use |
| 176 | the same syntax to specify several files to get uploaded (using the same |
| 177 | persistant connection), using -T. |
| 178 | |
| Daniel Stenberg | 01cfe67 | 2002-01-18 12:48:36 +0000 | [diff] [blame] | 179 | * When the multi interface has been implemented and proved to work, the |
| 180 | client could be told to use maximum N simultaneous transfers and then just |
| 181 | make sure that happens. It should of course not make more than one |
| 182 | connection to the same remote host. |
| Daniel Stenberg | d12fd89 | 2001-12-06 14:40:16 +0000 | [diff] [blame] | 183 | |
| Daniel Stenberg | 5c4b422 | 2002-02-18 10:51:28 +0000 | [diff] [blame] | 184 | * Extending the capabilities of the multipart formposting. How about leaving |
| 185 | the ';type=foo' syntax as it is and adding an extra tag (headers) which |
| 186 | works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where |
| 187 | fil1.hdr contains extra headers like |
| 188 | |
| 189 | Content-Type: text/plain; charset=KOI8-R" |
| 190 | Content-Transfer-Encoding: base64 |
| 191 | X-User-Comment: Please don't use browser specific HTML code |
| 192 | |
| 193 | which should overwrite the program reasonable defaults (plain/text, |
| 194 | 8bit...) (Idea brough to us by kromJx) |
| 195 | |
| Daniel Stenberg | e60e741 | 2001-11-02 12:51:18 +0000 | [diff] [blame] | 196 | TEST SUITE |
| 197 | |
| 198 | * Extend the test suite to include more protocols. The telnet could just do |
| 199 | ftp or http operations (for which we have test servers). |
| 200 | |
| 201 | * Make the test suite work on more platforms. OpenBSD and Mac OS. Remove |
| 202 | fork()s and it should become even more portable. |
| 203 | |
| 204 | * Introduce a test suite that tests libcurl better and more explicitly. |